home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / TEMP / GNU / bison / PureDecl < prev    next >
Text File  |  1995-06-28  |  1KB  |  34 lines

  1. Pure Decl
  2. Previous: <Start Decl=>StartDecl> * Next: <Decl Summary=>DeclSummar> * Up: <Declarations=>Declaratio>
  3.  
  4. #Wrap on
  5. {fH4}A Pure (Reentrant) Parser{f}
  6.  
  7. A {fUnderline}reentrant{f} program is one which does not alter in the course of
  8. execution; in other words, it consists entirely of {fUnderline}pure{f} (read-only)
  9. code.  Reentrancy is important whenever asynchronous execution is possible;
  10. for example, a nonreentrant program may not be safe to call from a signal
  11. handler.  In systems with multiple threads of control, a nonreentrant
  12. program must be called only within interlocks.
  13.  
  14. The Bison parser is not normally a reentrant program, because it uses
  15. statically allocated variables for communication with {fCode}yylex{f}.  These
  16. variables include {fCode}yylval{f} and {fCode}yylloc{f}.
  17.  
  18. The Bison declaration {fCode}%pure\_parser{f} says that you want the parser
  19. to be reentrant.  It looks like this:
  20.  
  21. #Wrap off
  22. #fCode
  23. %pure\_parser
  24. #f
  25. #Wrap on
  26.  
  27. The effect is that the two communication variables become local
  28. variables in {fCode}yyparse{f}, and a different calling convention is used
  29. for the lexical analyzer function {fCode}yylex{f}.  \*Note <Pure Calling=>PureCallin>: Calling Conventions for Pure Parsers, for the details of this.  The
  30. variable {fCode}yynerrs{f} also becomes local in {fCode}yyparse{f}
  31. (\*Note <Error Reporting=>ErrorRepor>: The Error Reporting Function {fCode}yyerror{f}).
  32. The convention for calling {fCode}yyparse{f} itself is unchanged.
  33.  
  34.